Este código possui um problema na entrada de dados da idade e do peso, se o usuário digitar um texto no lugar da idade ou do peso, será gerado uma exceção e o aplicativo fechará. Faça então a tratativa da leitura dos dados garantindo que o usuário insira um valor que seja aceito.
Desenvolva uma nova funcionalidade que conte a quantidade de de pessoas cadastradas.
Dica: Insira um novo item no menu "Exibir a QTDE de Pessoas" e depois no switch faça a exibição da quantidade de linhas no vetor.
Desenvolva uma nova funcionalidade que descubra quem tem a menor idade. Exiba o nome da Pessoa e a idade.
Dica: Insira um novo item no menu "Exibir a Pessoa com a Menor Idade".
Desenvolva uma nova funcionalidade que descubra quem tem o maior peso. Exiba o nome da Pessoa e o peso.
Dica: Insira um novo item no menu "Exibir a Pessoa com o Maior Peso".
Desenvolva uma nova funcionalidade que descubra a quantidade de pessoas quem tem um peso maior ou igual ao informado pelo usuario. Exiba somente a quantidade.
Dica: Insira um novo item no menu "Contar QTDE de Pessoas acima de Peso". Quando o usuário selecionar esta opção pergunte qual o peso que o usuário deseja utilizar como critério de busca, e descubra quantas pessoas tem um peso maior ou igual ao informado pelo usuário.
https://youtu.be/FZwm0QVFX3s
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.util.*;
public class App {
//inicio das variaveis globais
static Scanner teclado = new Scanner(System.in);
static String CAMINHO_ARQUIVO = "dados.txt";
static int TAMANHO_MAXIMO = 50;
static String[] nomes = new String[TAMANHO_MAXIMO];
static int[] idades = new int[TAMANHO_MAXIMO];
static float[] pesos = new float[TAMANHO_MAXIMO];
//controlar quantas posicoes ja foram gravadas no vetor
static int contador = 0;
//variavel para controlar quando se deve ou nao limpar a
static boolean limparTela = true;
//fim das variaveis globais
public static void main(String[] args) {
//variavel que armazena a resposta do menu
int opcao;
carregarDados();
do {
limparTela();
opcao = lerOpcaoMenu();
processarOpcaoMenu(opcao);
} while(opcao != 3);
teclado.close();
}
static void processarOpcaoMenu(int opcao){
switch (opcao) {
case 1:
adicionarDados();
break;
case 2:
limparTela();
mostrarDados();
limparTela = false;
break;
case 3:
limparTela();
salvarDados();
System.out.println("Encerrando...");
break;
default:
System.out.println("Opção inválida. Tente novamente.");
}
}
static void adicionarDados() {
limparTela = true;
limparTela();
//Verifico se tem espaco nos vetores
if (contador >= TAMANHO_MAXIMO) {
System.out.println("Limite de dados atingido! Não é possível adicionar mais.");
//estou usando um retorne para forcar o fim da execucao
//do metodo adicionarDados quando nao tiver mais posicoes livres
//no vetor.
return;
}
System.out.print("Digite o nome: ");
nomes[contador] = teclado.nextLine();
System.out.print("Digite a idade: ");
idades[contador] = teclado.nextInt();
System.out.print("Digite o peso (em kg): ");
pesos[contador] = teclado.nextFloat();
teclado.nextLine(); // Limpar buffer
contador++;
}
static int lerOpcaoMenu(){
int opcao;
System.out.println("\n############## Menu ##############\n");
System.out.println("1. Adicionar dados");
System.out.println("2. Mostrar dados");
System.out.println("3. Sair");
System.out.print("\nEscolha uma opção: ");
opcao = teclado.nextInt();
teclado.nextLine(); // Limpar buffer
return opcao;
}
static void carregarDados() {
FileReader arquivo = null;
BufferedReader bufferLeitura = null;
try {
//define o arquivo que sera abert
arquivo = new FileReader(CAMINHO_ARQUIVO);
bufferLeitura = new BufferedReader(arquivo);
String linha;
linha = bufferLeitura.readLine();
while (linha != null) {
String[] campos = linha.split(";");
if (campos.length == 3 && contador < TAMANHO_MAXIMO) {
nomes[contador] = campos[0];
//como o split devolve o resultado como string
//é necessario converter a idade do arquivo para int
idades[contador] = Integer.parseInt(campos[1]);
//é necessário converter o peso do arquivo para float
pesos[contador] = Float.parseFloat(campos[2]);
contador++;
}
linha = bufferLeitura.readLine();
}
} catch (FileNotFoundException e) {
System.out.println("Arquivo não encontrado. Um novo será criado ao salvar.");
} catch (IOException e) {
System.out.println("Erro ao carregar os dados: " + e.getMessage());
} catch (NumberFormatException e) {
System.out.println("Erro nos dados do arquivo: formato inválido.");
} finally {
// Fechamento do arquivo e do bufferLeitura
try {
if (bufferLeitura != null) {
bufferLeitura.close();
}
if (arquivo != null) {
arquivo.close();
}
} catch (IOException e) {
System.out.println("Erro ao fechar o arquivo: " + e.getMessage());
}
}
}
static void mostrarDados() {
int qtdeEspacos;
if (contador == 0) {
System.out.println("Nenhum dado disponível.");
return;
}
System.out.println("\nNome Idade Peso");
System.out.println("----------------------------------------------------------");
for (int i = 0; i < contador; i++) {
qtdeEspacos = 0;
System.out.print(nomes[i]);
//calcula quantos espacos sao necessarios para alinhar
//o valor da idade na posicao da coluna idade
qtdeEspacos = (20 - nomes[i].length());
//imprime a quantidade de espacos para alinhar os salarios
System.out.print(gerarEspacos(qtdeEspacos));
System.out.print(idades[i]);
qtdeEspacos = (20 - String.valueOf(idades[i]).length());
System.out.print(gerarEspacos(qtdeEspacos));
System.out.println(pesos[i]);
}
}
static void salvarDados() {
BufferedWriter gravador = null;
try {
// Inicializa o BufferedWriter para escrever no arquivo
gravador = new BufferedWriter(new FileWriter(CAMINHO_ARQUIVO));
// Escreve os dados no arquivo
for (int i = 0; i < contador; i++) {
//escreve os dados no arquivo
gravador.write(nomes[i] + ";" + idades[i] + ";" + pesos[i]);
//cria uma nova linha no arquivo
gravador.newLine();
}
System.out.println("Dados salvos no arquivo.");
} catch (IOException e) {
System.out.println("Erro ao salvar os dados: " + e.getMessage());
} finally {
// Fechamento do BufferedWriter
if (gravador != null) {
try {
gravador.close();
} catch (IOException e) {
System.out.println("Erro ao fechar o arquivo: " + e.getMessage());
}
}
}
}
static String gerarEspacos(int qtde){
String espacos = "";
for (int i = 0; i < qtde; i++) {
espacos += " ";
}
return espacos;
}
static void limparTela(){
if (limparTela){
try {
if (System.getProperty("os.name").contains("Windows")) {
new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
} else {
new ProcessBuilder("clear").inheritIO().start().waitFor();
}
} catch (Exception e) {
System.out.println("Erro ao limpar a tela: " + e.getMessage());
}
}
}
}